/// 定义各种字符类型的宏
/// 用于快速匹配和分类不同类型的字符
macro_rules! token_type {
    ("space") => { ' ' | '\n' | '\t' };        // 空白字符：空格、换行、制表符
    ("digit") => { '0'..='9' };                // 数字字符：0-9
    ("bracket") => { '(' | ')' | '[' | ']' | '{' | '}' }; // 括号字符：圆括号、方括号、花括号
    ("cmp_operator") => { '>' | '<' | '!' | '=' }; // 比较操作符字符：大于、小于、感叹号、等于
    ("operator") => { ',' | ':' | '+' | '-' | '/' | '*' | '^' | '%' }; // 运算符字符：逗号、冒号、加减乘除等
    ("alpha") => { 'A'..='Z' | 'a'..='z' | '$' | '_' | '#' }; // 字母字符：大小写字母、$、_、#
    ("alphanumeric") => { 'A'..='Z' | 'a'..='z' | '0'..='9' | '$' | '_' | '#' }; // 字母数字字符：字母加数字
    ("question_mark") => { '?' }               // 问号字符
}

/// 检查字符是否属于指定类型的宏
/// 使用模式匹配来判断字符是否符合特定的字符类型
macro_rules! is_token_type {
    ($str: expr, $t: tt) => {
        matches!($str, crate::lexer::codes::token_type!($t))
    };
}

// 公开导出宏供其他模块使用
pub(crate) use is_token_type;
pub(crate) use token_type;
